HTMLify
Vertical Traversal of Binary Tree.java
Views: 1 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | // Vertical Traversal of Binary Tree java solution //{ Driver Code Starts //Initial Template for Java //Contributed by Sudarshan Sharma import java.util.LinkedList; import java.util.Queue; import java.io.*; import java.util.*; class Node{ int data; Node left; Node right; Node(int data){ this.data = data; left=null; right=null; } } class GfG { static Node buildTree(String str){ if(str.length()==0 || str.charAt(0)=='N'){ return null; } String ip[] = str.split(" "); // Create the root of the tree Node root = new Node(Integer.parseInt(ip[0])); // Push the root to the queue Queue<Node> queue = new LinkedList<>(); queue.add(root); // Starting from the second element int i = 1; while(queue.size()>0 && i < ip.length) { // Get and remove the front of the queue Node currNode = queue.peek(); queue.remove(); // Get the current node's value from the string String currVal = ip[i]; // If the left child is not null if(!currVal.equals("N")) { // Create the left child for the current node currNode.left = new Node(Integer.parseInt(currVal)); // Push it to the queue queue.add(currNode.left); } // For the right child i++; if(i >= ip.length) break; currVal = ip[i]; // If the right child is not null if(!currVal.equals("N")) { // Create the right child for the current node currNode.right = new Node(Integer.parseInt(currVal)); // Push it to the queue queue.add(currNode.right); } i++; } return root; } static void printInorder(Node root) { if(root == null) return; printInorder(root.left); System.out.print(root.data+" "); printInorder(root.right); } public static void main (String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t=Integer.parseInt(br.readLine()); while(t-- > 0){ String s = br.readLine(); Node root = buildTree(s); Solution obj = new Solution(); ArrayList <Integer> res = obj.verticalOrder(root); for (Integer num : res) System.out.print(num + " "); System.out.println(); } } } // } Driver Code Ends //User function Template for Java class Pair { Node n; int x; Pair(Node n1, int x1) { n = n1; x = x1; } } class Solution { // Function to find the vertical order traversal of Binary Tree. static ArrayList<Integer> verticalOrder(Node root) { // add your code here TreeMap<Integer, LinkedList<Integer>> map = new TreeMap<>(); Queue<Pair> q = new LinkedList<>(); ArrayList<Integer> ans = new ArrayList<>(); if (root == null) { return ans; } else { q.add(new Pair(root, 0)); } while (!q.isEmpty()) { Pair p = q.poll(); Node remn = p.n; int remv = p.x; if (!map.containsKey(remv)) { map.put(remv, new LinkedList<Integer>()); } map.get(remv).add(remn.data); if (remn.left != null) { q.add(new Pair(remn.left, remv - 1)); } if (remn.right != null) { q.add(new Pair(remn.right, remv + 1)); } } for (LinkedList<Integer> list : map.values()) { ans.addAll(list); } return ans; } } |